package com.cskaoyan._01abstractclazz._03use;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/10 17:44
 **/
/*
抽象类的使用
1.如果子类是一个普通类,要实现抽象父类中的所有抽象方法
2.如果子类是一个抽象类,可以选择性的实现抽象父类中的抽象方法
抽象类还可以继承普通类

注意:
1. abstract关键字，不能用来修饰构造器、属性、代码块等结构。只能修饰类或者方法。
2. abstract修饰类时，类的修饰符不能有final。
3. abstract修饰方法时，该方法不能有修饰符：
   1. private
   2. static
   3. final
4. 一个抽象类中可以没有抽象方法，但是没有意义
 */
public class Demo {
    public static void main(String[] args) {

    }
}

abstract class AbstractA extends AAA{
    // 抽象方法
    abstract void m1();

    abstract void m2();

    //void m3() {
    //
    //}
    //
    //static void m4() {
    //
    //}
}

// 普通类继承抽象类
// Class 'A' must either be declared abstract or
// implement abstract method 'm1()' in 'AbstractA'
class A extends AbstractA{

    @Override
    void m1() {

    }

    @Override
    void m2() {

    }
}

abstract class AA extends AbstractA{
    // private abstract void func() ;
    //public static abstract void func() ;

    //abstract int a = 1;

    //abstract public AA() {
    //}

    //abstract {
    //
    //}
    @Override
    void m1() {

    }
}
abstract class AAAA{}

class AAA{}